package main

import (
	"fmt"
	"gintify/core"
	"gintify/router"
	"gintify/util/fake"
)

// @title gintify API
// @version 1.0
// @description This is a api server for gintify.

// @contact.name kessil
// @contact.url http://github.com/kessil
// @contact.email kessil@github.com

// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html

// @host localhost:port
// @BasePath /

// @securityDefinitions.apikey ApiKeyAuth
// @in header
// @name Authorization
func main() {
	//var shouldFake bool
	//flag.BoolVar(&shouldFake, "fake", false, "初始化数据库")
	//flag.Parse()

	// 初始化全局变量
	// parmas: env = development | production | test | docker
	core.New("development")

	// 程序退出前将缓存日志写入文件
	defer func() {
		// 最后退出日志，defer在最前
		err := core.LG.Sync()
		if err != nil {
			panic("缓存日志写入失败")
		}
	}()

	// 程序退出前关闭数据库连接
	// TODO gorm.io/gorm 是否需要关闭待研究文档
	//defer func() {
	//	err := core.DB.Close()
	//	if err != nil {
	//		panic("数据库关闭失败")
	//	}
	//}()


	// 初始化路由
	r := router.InitRouters()

	// 初始化数据库 第一次执行即可
	go fake.FakeInit()


	// 运行监听
	addr := fmt.Sprintf("%s:%d", core.CF.Server.Host, core.CF.Server.Port)
	_ = r.Run(addr) // localhost:8080
}

